package com.java;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * LinkedHashMap是一个特殊的HashMap，
 * 它在hashmap的基础上添加了一个双向链表，
 * 通过此链表可以记录key的添加顺序或key的访问顺序
 * abcd
 * [d][c][b][a]
 * 存储e
 * [e][d][c][b]
 * 访问b
 * [b][e][d][c]
 * 存储f
 * [f][b][e][d]
 *
 * LRU算法：
 * 1)缓存数据淘汰算法，缓存满的时候淘汰最近很少访问的数据
 * 2)热点数据的获取，频繁被访问的数据，高并发环境下可以对这些数据的访问进行限流。
 */
public class LinkedHashMapTests {
    public static void main(String[] args) {
        LinkedHashMap map=
                new LinkedHashMap(3, 0.75f, true){
                    @Override
                    protected boolean removeEldestEntry(Map.Entry eldest) {
                        return size()>3;
                    }
                };
        map.put("A", 100);
        map.put("B", 200);
        map.put("C", 300);
        map.get("A");
        System.out.println(map);
        map.put("D", 400);
        System.out.println(map);
    }
}
